#include "compile_run.hpp"
#include "compiler.hpp"
#include "runner.hpp"
// 引入单头文件第三方库,阻塞式多线程的一个网络http库
#include "../comm/httplib.h"

using namespace ns_compile_and_run;
using namespace httplib;

void Usage(string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }

    Server svr;

    svr.Post("/compile_and_run", [](const Request &req, Response &res)
             {
                // std::cerr << "[DEBUG] in_json: " << req.body << std::endl;// for dubug
                string in_json = req.body;
                string out_json;
                if(!in_json.empty()){
                    CompileAndRun::Start(in_json, &out_json);
                    res.set_content(out_json, "application/json;charset=utf-8");
                    // res.status = 200;// 强制设置，用于调试
                } });
    svr.listen("0.0.0.0", atoi(argv[1]));
    // svr.Get("/hello", [](const Request &req, Response &res)
    //         { res.set_content("hello!!!!!", "text/plain"); });
    // svr.listen("0.0.0.0", 8080); // 启动http服务

    // // for test
    //  std::string in_json;
    //  Json::Value in_value;
    //  in_value["code"] = R"(#include <iostream>
    //      int main(){
    //          std::cout << "hello "<< std::endl;
    //          int* p = new int[1024*1024*21];
    //          ads
    //          return 0;
    //      })";
    //  in_value["input"] = "";
    //  in_value["cpu_limit"] = 1;
    //  in_value["mem_limit"] = 1024 * 30;
    //  Json::FastWriter writer;
    //  in_json = writer.write(in_value);
    //  // std::cout << in_json << std::endl;
    //  string out_json;
    //  CompileAndRun::Start(in_json, &out_json);
    //  std::cout << out_json << std::endl;
    return 0;
}